<?php
namespace Admin\Model;
use Common\Model\CommonModel;

class UserModel extends CommonModel {
    protected $tableName = 'users';
    
    protected $_validate = array(

        //验证用户名
        array('nickname', 'require', '昵称不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH),

        // 验证用户名
        array('user_login', 'require', '请填写用户名', self::MUST_VALIDATE, 'regex', self::MODEL_INSERT),
        array('user_login', '3,32', '用户名长度为1-32个字符', self::MUST_VALIDATE, 'length', self::MODEL_INSERT),
        array('user_login', '', '用户名被占用', self::MUST_VALIDATE, 'unique', self::MODEL_INSERT),
        array('user_login', '/^(?!_)(?!\d)(?!.*?_$)[\w]+$/', '用户名只可含有数字、字母、下划线且不以下划线开头结尾，不以数字开头！', self::MUST_VALIDATE, 'regex', self::MODEL_INSERT),
        array('user_login', 'checkDenyMember', '该用户名禁止使用', self::EXISTS_VALIDATE, 'callback'), //用户名禁止注册

        // 验证密码
        array('password', 'require', '请填写密码', self::MUST_VALIDATE, 'regex', self::MODEL_INSERT),
        array('password', '6,30', '密码长度为6-30位', self::MUST_VALIDATE, 'length', self::MODEL_INSERT),
        array('password', '/(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*()_+{}:"<>?\-=[\];\',.\/]+)$)^[\w~!@#$%^&*()_+{}:"<>?\-=[\];\',.\/]+$/', '密码至少由数字、字符、特殊字符三种中的两种组成', self::MUST_VALIDATE, 'regex', self::MODEL_INSERT),
        array('repassword', 'password', '两次输入的密码不一致', self::EXISTS_VALIDATE, 'confirm', self::MODEL_INSERT),

        // 验证邮箱
        array('email', 'email', '邮箱格式不正确', self::EXISTS_VALIDATE, 'regex', self::MODEL_INSERT),
        array('email', '1,32', '邮箱长度为1-32个字符', self::EXISTS_VALIDATE, 'length', self::MODEL_INSERT),
        array('email', '', '邮箱被占用', self::EXISTS_VALIDATE, 'unique', self::MODEL_INSERT),

        // 验证手机号码
        array('mobile', '/^1\d{10}$/', '手机号码格式不正确', self::EXISTS_VALIDATE, 'regex', self::MODEL_INSERT),
        array('mobile', '', '手机号被占用', self::EXISTS_VALIDATE, 'unique', self::MODEL_INSERT),
    );

    protected $_auto = array(
        array('score', '0', self::MODEL_INSERT),
        array('coin', '0', self::MODEL_INSERT),
        array('last_login_ip', 'get_client_ip', self::MODEL_INSERT, 'function', 1),
        array('last_login_time', NOW_TIME, self::MODEL_BOTH),
        array('password', 'encrypt', self::MODEL_BOTH, 'function'),
        array('create_time',NOW_TIME, self::MODEL_INSERT),
        array('status', '1', self::MODEL_INSERT),
    );


    /**
     * 检测用户名是不是被禁止注册
     * @param  string $username 用户名
     * @return boolean ture 未禁用，false 禁止注册
     */
    protected function checkDenyMember($username){
        $deny = C('user_config.deny_username');
        $deny = explode ( ',', $deny);
        foreach ($deny as $k=>$v) {
            if(stristr($username, $v)){
                return false;
            }
        }
        return true;
    }

    /**
     * 用户登录
     */
    public function login($username, $password, $map=array()) {
        //去除前后空格
        $username = trim($username);

        //匹配登录方式
        if (preg_match("/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/", $username)) {
            $map['email'] = array('eq', $username);     // 邮箱登陆
        } elseif (preg_match("/^1\d{10}$/", $username)) {
            $map['mobile'] = array('eq', $username);    // 手机号登陆
        } else {
            $map['username'] = array('eq', $username);  // 用户名登陆
        }

        $map['status']   = array('eq', 1);
        $user_info = $this->where($map)->find(); //查找用户
        if (!$user_info) {
            $this->error = '用户不存在或被禁用！';
        } else {
            if (encrypt($password) !== $user_info['password']) {
                $this->error = '密码错误！';
            } else {
                return $user_info;
            }
        }
        return false;
    }

    /**
     * 设置登录状态
     */
    public function auto_login($user) {
        $auth_role=M('AuthRoleAccess')->where(array('uid'=>$user['uid']))->find();
        //判断角色用户是否审核
        $map['uid'] = $user['uid'];
        $map['role_id'] = $auth_role['group_id'];
        $audit =$auth_role['status'];//用户角色审核状态  1：通过，2：待审核，0：审核失败
        //判断角色用户是否审核 end
        // 记录登录SESSION和COOKIES
        $auth_data = array(
            'uid'      => $user['uid'],
            'user_login' => $user['user_login'],
            'nickname' => $user['nickname'],
            'avatar'   => $user['avatar'],
            'last_login_ip' => get_client_ip(1),
            'role_id' =>$auth_role['group_id'],
            'audit' => $audit,
            'status' => $user['status'],
        );
        session('user_login_auth', $auth_data);
        session('activation_auth_sign',data_auth_sign($auth_data));
        $this->where(array('uid'=>$user['uid']))->setField('activation_auth_sign',session('activation_auth_sign'));
        return true;
    }

    /**
     * 注销当前用户
     * @return void
     */
    public function logout(){
        session('user_login_auth', null);
        session('activation_auth_sign', null);
    }
    /**
     * 检测用户是否登录
     * @return integer 0-未登录，大于0-当前登录用户ID
     */
    public function is_login() {
        $user = session('user_login_auth');
        if (empty($user)) {
            return 0;
        } else {
            if (session('activation_auth_sign') ==data_auth_sign($user)) {
                return $user['uid'];
            } else {
                return 0;
            }
        }
    }

}
